/*
 * Copyright (C) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the 'License');
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an 'AS IS' BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "decode_interceptor_default.h"

namespace ImageKnifePro {
bool DecodeInterceptorDefault::DecodeFrame(std::shared_ptr<ImageKnifeTaskInternal> task)
{
    auto source = task->GetImageSourceNative();
    if (source == nullptr) {
        task->EchoError("Get ImageSourceNative Failed");
        return false;
    }
    DecodeArgs args;
    if (!ConfigDecodeOption(args, task)) {
        return false;
    }

    OH_PixelmapNative *pixelmap = nullptr;
    auto imgErrorCode = OH_ImageSourceNative_CreatePixelmap(source, args.decodeOption, &pixelmap);
    if (imgErrorCode != IMAGE_SUCCESS) {
        task->EchoError("Create Pixelmap Failed, error code: " + std::to_string(imgErrorCode));
        return false;
    }
    task->product.imageData = std::make_shared<ImageData>(pixelmap);

    Orientate(task, source);
    return true;
}

}